﻿/*-------------------------------------------------------------------------
* 命名空间: XrayDirection.ImageManager/ImageHandler
* 类       名: ImageHandler
* 功      能:  TD
* 时      间:  2023/12/29 9:30:01
* 版      本:  V1.0
* 作      者:  Fioman
* 格      言:  Talk is cheap,show me the code ^_^
*-------------------------------------------------------------------------*/
using System.Drawing;
using System.IO;
using System.Windows.Media.Imaging;
using XrayDirection.Extensions;

namespace XrayDirection.ImageManager
{
    public class ImageHandler : IBitmapImage
    {
        public BitmapSource? BitmapImage { get; }
        public ImageHandler(BitmapSource image)
        {
            BitmapImage = image;
        }


        public double Width => BitmapImage == null ? 0 : BitmapImage.Width;

        public double Height => BitmapImage == null ? 0 : BitmapImage.Height;

        public void Dispose()
        {
            /*
             * 如果你没有使用Stream来创建BitmapImage，那么你通常不需要做任何清理工作。
             * 当BitmapImage不再被引用时，.NET的垃圾回收器会自动回收它占用的内存。
             * 注意：如果你在处理非常大的图像或者在短时间内处理大量的图像时，垃圾回收可能无法及时进行，
             * 这可能会导致内存使用量暂时上升。在这种情况下，你可能需要考虑使用一些高级的内存管理策略，
             * 但这通常只在处理大型或者专业的图像应用程序时才需要。
             */
        }

        public void Save(string filename, ImageFormats format)
        {
            BitmapEncoder encoder = format.ToBitmapEncoder();
            encoder?.Frames.Add(BitmapFrame.Create(BitmapImage));
            using (var stream = new FileStream(filename, FileMode.Create))
            {
                encoder?.Save(stream);
            }
        }

        public void Save(Stream stream, ImageFormats format)
        {
            BitmapEncoder encoder = format.ToBitmapEncoder();
            encoder?.Frames.Add(BitmapFrame.Create(BitmapImage));
            encoder?.Save(stream);
        }
    }
}
